package com.atguigu.vue.base;


import lombok.Data;

@Data
public class R<T> {
    private Integer code;//200成功， 其他都是失败
    private String message;//状态码的描述字符串
    private T data;//成功的数据

    //快速创建成功的R对象的方法
    public static R ok() {
        return R.ok(null);
    }

    public static <T> R ok(T data) {
        return R.build(200, "SUCCESS", data);
    }

    //快速创建失败的R对象的方法
    // -1表示默认失败  默认的失败的R对象
    public static R error() {
        return R.error(-1, "UNKNOW ERROR");
    }

    //根据传入的错误状态码 和messsage创建r对象
    public static R error(Integer code, String message) {

        return R.build(code, message, null);
    }

    //根据传入的状态码和message构建 r对象
    public static <T> R build(Integer code, String message, T data) {
        R r = new R();
        r.setCode(code);
        r.setMessage(message);
        r.setData(data);
        return r;
    }


    //修改R对象属性值的链式调用方法
    //成员方法
    public R code(Integer code) {//R对象的成员方法调用后 返回对象本身，又可以继续调用其他的成员方法
        this.code = code;
        return this;
    }

    public R message(String message) {
        this.message = message;
        return this;
    }

    public R data(T data) {
        this.data = data;
        return this;
    }

    public static void main(String[] args) {
        System.out.println(R.ok("hehe"));
        System.out.println(R.error(301, "删除失败"));
        System.out.println(R.build(303, "asdsad", null));

        System.out.println(R.error()
                .code(501)
                .message("账号已存在"));

    }
}
